#[allow(dead_code)]
fn main() {
    let mut st = String::from("Hello, world\t");
    st.push('c');
    print_str(&st);
    //bytes转字符串
    println!("{:?}", String::from_utf8_lossy(st.as_bytes()));
    //所有权转移,字符串属于转移操作，不是复制，
    let s2 = String::from("100");
    // let s3 = s2; //当s2赋给s3时，其所有权发生了变更,后续无法再继续引用。
    // println!("{}",s2); //报错
    //解决办法是使用深拷贝： clone()
    let s3 = s2.clone();
    println!("{}", s2); //正确输出
}

//碰到传入时是字符串则了 Deref 间接转换
fn print_str(i: &str) {
    println!("{}", i);
    let x = String::from("字符串");
    println!("一个字符占：{} 字节", std::mem::size_of_val(&x));
}

// fn dangle() -> &String {
//     //离开了生命周期，悬垂指针，危险操作,编译无法通过
//     let s = String::from("str");
//     &s
// }
